import getFieldsDescrible from '../../utils/form-fields-desc';
import getTableColumnDescrible from '../../utils/table-column-desc';
import getIndexConfigDescrible from '../../utils/index-config-desc';
import getPageParamKeysDescrible from '../../utils/page-param-keys-desc';
import getRequestConfigDescrible from '../../utils/request-config-desc';

export default {
    attributes: [
        {
            params: 'v-model',
            des: '是否显示 table-picker 列表选择器',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'title',
            des: '弹窗标题',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'width',
            des: '弹窗宽度',
            type: 'String | Number',
            values: '-',
            defaultVal: '800px',
        },
        {
            params: 'multiple',
            des: '是否多选',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'required',
            des: '点击确认时是否校验必须至少选择一条数据',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'confirm-text',
            des: '弹窗提交按钮文案',
            type: 'String',
            values: '-',
            defaultVal: '"确认"',
        },
        {
            params: 'cancel-text',
            des: '弹窗取消按钮文案',
            type: 'String',
            values: '-',
            defaultVal: '"取消"',
        },
        {
            params: 'index-config',
            des: '列表首列配置项; 详细配置请查看下方【index-config 配置项】',
            type: 'Object',
            values: '-',
            defaultVal: '{ label: "序号", type: "index", width: 60 }',
            details: [
                {
                    title: '配置项【index-config】',
                    describes: ['用于设置列表首列的类型及相关特殊化配置'],
                    configList: getIndexConfigDescrible('picker'),
                },
            ],
        },
        {
            params: 'search-config',
            des: '列表查询模块配置项; 详细配置请查看下方【search-config 配置项】',
            type: 'Object',
            values: '-',
            defaultVal: '-',
            details: [
                {
                    title: '配置项【search-config】',
                    describes: ['用于设置列表查询模块相关功能的配置字段'],
                    configList: getFieldsDescrible('picker'),
                },
            ],
        },
        {
            params: 'table-column',
            des: '表格列的配置项; 详细配置请查看下方【table-column 公共配置项】及特殊配置项',
            type: 'Array',
            values: '-',
            defaultVal: '-',
            details: [
                {
                    title: '公共配置项【table-column】',
                    describes: [
                        'table-column 配置项内可根据配置不同的 type，从而展示不同类型的快捷列，快捷列存在对应的特殊配置项',
                        '此处为公共配置项，其针对所有类型的快捷列均生效',
                    ],
                    configList: getTableColumnDescrible('common'),
                },
                {
                    title: '特殊配置项【type="image"】',
                    describes: [
                        '当在 table-column 子配置项内配置了 type 为 "image" 时，表示该列单元格内均以图片的方式展示，并支持传入以下额外配置',
                    ],
                    configList: getTableColumnDescrible('image'),
                },
                {
                    title: '特殊配置项【type="button"】',
                    describes: [
                        '当在 table-column 子配置项内配置了 type 为 "button" 时，表示该列单元格内均以按钮的方式展示，并支持传入以下额外配置',
                    ],
                    configList: getTableColumnDescrible('button'),
                },
                {
                    title: '特殊配置项【type="timeStamp"】',
                    describes: [
                        '当某列单元格内的值是时间戳格式，需要转换成时间文本展示时，你可以在 table-column 子配置项内配置 type 为 "timeStamp"，那么该列将自动格式化时间并按照你指定的规则展示；支持传入以下额外配置',
                    ],
                    configList: getTableColumnDescrible('timeStamp'),
                },
                {
                    title: '特殊配置项【type="tag"】',
                    describes: [
                        '当在 table-column 子配置项内配置了 type 为 "tag" 时，表示该列单元格内均以 tag标签 的方式展示，并支持传入以下额外配置',
                    ],
                    configList: getTableColumnDescrible('tag'),
                },
                {
                    title: '特殊配置项【type="switch"】',
                    describes: [
                        '当在 table-column 子配置项内配置了 type 为 "switch" 时，表示该列单元格内均以开关滑块的方式展示，并支持传入以下额外配置',
                    ],
                    configList: getTableColumnDescrible('switch'),
                },
                {
                    title: '特殊配置项【type="popover"】',
                    describes: [
                        '当在 table-column 子配置项内配置了 type 为 "popover" 时，表示该列单元格内均以浮窗提示框的方式展示，支持自定义提示框内容，并支持传入以下额外配置',
                    ],
                    configList: getTableColumnDescrible('popover'),
                },
                {
                    title: '特殊配置项【type="clickInput"】',
                    describes: [
                        '当在 table-column 子配置项内配置了 type 为 "clickInput" 时，表示该列单元格内均以文本的方式展示，点击时变成输入框，支持修改内容和自定义提交方法，并支持传入以下额外配置',
                    ],
                    configList: getTableColumnDescrible('clickInput'),
                },
            ],
        },
        {
            params: 'table-data',
            des: '列表数据（若配置了requestConfig，则该字段会被自动忽略）',
            type: 'Array',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'request-config',
            des: '通过接口请求表格数据的配置；详情请查阅下方说明',
            type: 'Object',
            values: '-',
            defaultVal: '-',
            details: [
                {
                    title: '配置项【request-config】',
                    describes: [
                        '除以下字段外，request-config 还支持传入axios的所有可配置参数，详细配置说明请查阅 https://github.com/axios/axios#request-config',
                    ],
                    configList: getRequestConfigDescrible('table'),
                },
            ],
        },
        {
            params: 'page-param-keys',
            des: '组件内部在通过接口请求数据时，默认会把排序和分页相关的字段也组装到接口参数内，如果后台接口的分页、排序字段的 key 和组件内默认的不一致，那么你可以通过 pageParamKeys 来替换这些字段的key；',
            type: 'Object',
            values: '-',
            defaultVal: '请查阅下方【page-param-keys 配置项】说明',
            details: [
                {
                    title: '配置项【page-param-keys】',
                    describes: [
                        'page-param-keys 用于指定分页、排序的字段名，以及排序规则升序/降序的值',
                    ],
                    configList: getPageParamKeysDescrible(),
                },
            ],
        },
        {
            params: 'row-key',
            des: 'rowKey 为每一行的唯一键，组件内默认取每一行的id，注意：如果每行数据存在唯一id则可省略传入该属性，否则需要传入 rowKey 来指定唯一键以确保勾选行数据、筛选表格数据等功能正常',
            type: 'String',
            values: '-',
            defaultVal: '\'id\'',
        },
        {
            params: 'selection',
            des: '初始选中的行，支持传值 [\'id1\', \'id2\'] 或 [row1, row2, row3]，组件内部根据rowKey（未配置时，默认为id）与列表数据来匹配某一行是否被选中。',
            type: 'Array',
            values: '-',
            defaultVal: '',
        },
        {
            params: 'refresh-on-reset',
            des: '是否支持点击重置按钮时刷新列表',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'show-pagination',
            des: '是否需要分页控件',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'is-refresh',
            des: '是否需要手动刷新列表按钮（配置 requestConfig 时生效）',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'layout',
            des: '分页配置',
            type: 'String',
            values: 'sizes, prev, pager, next, jumper, ->, total, slot',
            defaultVal: '\'total, sizes, prev, pager, next\'',
        },
        {
            params: 'page-size',
            des: '每页显示条目个数',
            type: 'Number',
            values: '-',
            defaultVal: '5',
        },
        {
            params: 'page-sizes',
            des: '每页显示个数选择器的选项设置',
            type: 'Array',
            values: '-',
            defaultVal: '[5,, 10, 20]',
        },
        {
            params: 'stripe',
            des: '是否为斑马纹列表',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'border',
            des: '表格是否带有纵向边框',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'size',
            des: '组件整体尺寸',
            type: 'String',
            values: 'large/small/mini',
            defaultVal: '\'small\'',
        },
    ],
    events: [
        {
            name: 'confirm',
            des: '选中数据行后点击提交',
            params: '(rows)',
        },
        {
            name: 'cancel',
            des: '弹窗关闭触发的事件',
            params: '-',
        },
        {
            name: 'clear',
            des: '点击清空按钮抛出的事件',
            params: '-',
        },
    ],
    slots: [],
    refs: [
        {
            name: 'clear',
            des: '清空当前选中的节点',
            params: '-',
            return: '-',
        },
    ],
};
